package com.ce.sys.account.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.Cookie;

import com.ce.framework.constants.WebConstants;
import com.ce.framework.datamaintain.action.DataMaintainAction;
import com.ce.framework.exception.AppException;
import com.ce.framework.util.StringUtil;
import com.ce.framework.util.Uuid;
import com.ce.sys.login.model.User;
import com.ce.sys.role.logic.IRoleLogic;
import com.ce.util.DbUtil;
import com.ce.util.SessionUtil;

/**
 * 嫦娥软件有限公司 版权所有 2013
 * 创建人： andy
 * 创建时间： 2013-11-2 下午07:34:48
 * 功能描述：账号管理，实现账号的删除及角色分配的功能
 * ==================================
 * 修改历史
 * 修改人        修改时间      修改位置（函数名）
 *
 * ==================================
 */
public class AccountAction extends DataMaintainAction {
	private static final long serialVersionUID = 1L;

	private IRoleLogic roleLogic ;
	/* 
	 * 功能：删除账号
	 * 1 需要将人员表中的status设置为0，账号信息设置为空
	 * 2 需要将角色人员关联表中的该人员删除
	 */
	@Override
	protected String delItem() throws AppException {
		// TODO Auto-generated method stub
		String[] delIds = this.getParameterValues(WebConstants.SELECT_ITEMS_NAME);
		if(delIds==null||delIds.length==0){
			throw new AppException("没有选择要删除的记录");
		}
		String upDataUser = "update sys_t_person p set p.vc_status =0 , p.vc_log$name='', p.vc_pwd='' where p.vc_id in ("+StringUtil.fromArrayToStr(delIds, true)+")";
		String delRoleUser = "delete sys_t_account$role t where t.vc_user$id in ("+StringUtil.fromArrayToStr(delIds, true)+")";
		List<String> sqlList = new ArrayList<String>();
		sqlList.add(upDataUser);
		sqlList.add(delRoleUser);
		DbUtil.executeSqlUpdate(sqlList);
		return this.searchData();
	}

	/**
	 * 开发人： andy
	 * 开发时间： 2013-11-2 下午08:08:13
	 * 功能描述：打开选择角色的界面
	 * 方法的参数和返回值
	 * @return
	 * @throws AppException
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public String openChooseRolePage() throws AppException{
		//获取用户已存在的角色列表
		List<?> chooseRoleList = this.baselogic.searchByHql("from SysAccountRole po where po.vcUserId = '"+this.getParameter("userId")+"'");
		//获取所有角色的列表
		List<?> allRoleList = this.baselogic.searchByHql("from SysRole po where po.vcId!='common' and  po.vcDelFlag = 0 order by po.vcName,po.vcSeq asc");
		setAttribute("chooseRoleList", chooseRoleList);
		setAttribute("allRoleList", allRoleList);
		return "chooseRolePage";
	}
	
	/**
	 * 开发人： andy
	 * 开发时间： 2013-11-2 下午08:08:10
	 * 功能描述：保存用户选择的角色
	 * 方法的参数和返回值
	 * @return
	 * @throws AppException
	 * String 
	 * ==================================
	 * 修改历史
	 * 修改人        修改时间      修改原因及内容
	 *
	 * ==================================
	 */
	public String saveChooseRole() throws AppException{
		String[] ids = this.getParameterValues("roleIds");
		String userId = this.getParameter("userId");
		try{
			roleLogic.updateUserRole(ids, userId);	
		}catch(Exception e){
			return super.returnInfoForJS(false, "角色保存失败！");
		}
		return super.returnInfoForJS(true,null);
	}
	
	@SuppressWarnings("deprecation")
	public String switchUser(){
		String userId = getParameter("userId");
		User user = User.getUser();
		if(user.isSuperUser()){
			user = SessionUtil.initSessionUser(userId, getRequest(), getResponse());
		    String sql = "insert into SYS_T_SESSION$INF(SESSION_ID,SESSION_VALUE) values(?,?)";
			String ssoid = Uuid.getUuid();
			DbUtil.executeSqlUpdate(sql ,new Object[]{ssoid ,userId});
			Cookie ck = new Cookie("SSO_ID",ssoid);
			ck.setPath("/");
			getResponse().addCookie(ck);
		}
		return this.writeJavaScript("top.location.href=top.location.href;");
	}


	public IRoleLogic getRoleLogic() {
		return roleLogic;
	}



	public void setRoleLogic(IRoleLogic roleLogic) {
		this.roleLogic = roleLogic;
	}
    
    

}
